package cn.itcast.a_helloworld;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class HelloWorld_cn {
	/**
	 * 通过下面的代码，默认读入该配置文件activiti.cfg.xml的信息
	 */
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	/**部署流程定义1.*/
	@Test
	public void deploymentProcessDefinition() {
		//获取到部署的对象
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
			.createDeployment()//创建一个部署对象
			.name("Activiti入门程序")//调价部署的名称
			.addClasspathResource("diagrams/helloworld/HelloWorld_cn.bpmn")//从ClassPath的资源中加载，一次只能加载一个文件，不能是文件夹
			.addClasspathResource("diagrams/helloworld/HelloWorld_cn.png")//从ClassPath的资源中加载，一次只能加载一个文件，不能是文件夹
			.deploy();//完成部署
		
		msyso("部署ID",deployment.getId());//部署ID:1
		msyso("部署名称",deployment.getName());//部署名称:Activiti入门程序
	}
	
	/**开始流程定义2.*/
	@Test
	public void startProcessInstance() {
		//流程定义的key
		String processInstanceByKey = "helloworld_cn";
		ProcessInstance processInstance =  processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
				/*
				 * 使用流程定义的key启动流程实例，key对应helloworld.bpmn文件中id的属性值
				 * 使用key值启动，默认是按照最新版本的流程定义启动
				 * */
				.startProcessInstanceByKey(processInstanceByKey);
		msyso("流程实例ID",processInstance.getId());//流程实例ID：101
		msyso("流程定义ID",processInstance.getProcessDefinitionId());//流程定义ID：4
	}
	
	/**查询当前人的个人任务3.*/
	@Test
	public void findMyPersonalTask() {
		String assignee = "";
		assignee = "张三";
		assignee = "李四";
		assignee = "王五";
		List<Task> list =  processEngine.getTaskService()//与正在执行的任务相关的service
			.createTaskQuery()//创建任务查询对象
			.taskAssignee(assignee)//制定个人任务查询，指定办理人
			.list();
		
		if (list!=null&&list.size()>0) {
			for (Task task : list) {
				msyso("任务ID",task.getId());//
				msyso("任务名称",task.getName());//
				msyso("任务的创建时间",task.getCreateTime());//
				msyso("任务办理人",task.getAssignee());//
				msyso("流程实例ID",task.getProcessInstanceId());//
				msyso("流程定义ID",task.getProcessDefinitionId());//
				msyso("执行对象ID",task.getExecutionId());//
			}
		}
	}
	
	/**查询当前人的个人任务4.*/
	@Test
	public void completeMyPersonalTask() {
		String taskId = "602";
		processEngine.getTaskService()
			.complete(taskId);
		msyso("完成任务:任务ID",taskId);//
	}

	private void msyso(String outPrintLabel, Object outPrintVal) {
		System.out.println(outPrintLabel+":"+outPrintVal);
	}

	
}
